One problem with conventional routers is that they allow only one version of client protocol software to run on the system at a time because the different versions of client protocol software may have different capabilities.
Another problem with conventional routers is that they may support many thousands or tens of thousands of peers. Each peer may have unique input and output policies. This places a heavy burden on the routing protocols especially when processing route updates from peers.
Another problem with conventional routers is that software for manipulating route attributes has protocol specific knowledge for each routing protocol's respective route attributes supported by the software. Whenever a new attribute is added to a protocol, all the software to manipulate routes for each of the protocols may have to be re-compiled, even when the change are isolated to one protocol.
Another problem with supporting more than one client protocol including more than one version of a client protocol is that statements not supported by any one protocol or version thereof may be skipped during execution. A user or operator may not know what statements are being skipped and may be unable to predict the behavior of the system.
Another problem with conventional routers is that when a new routing policy is added when the router is implementing a prior routing policy, the router may transition among intermediate configuration states. These intermediate configuration states may provide undesirable results and may result in network instability.
Thus, there are general needs for methods and policy compilers that support multiple software versions of client protocols with differing capabilities as well as differing client protocols. Thus, there are also general needs for methods and policy compilers that process route updates more efficiently. Thus, there are also general needs for methods and routers that permit the addition of new attributes to a routing protocol without having to recompile the policy compiler itself. Thus, there are also general needs for methods and policy compilers that verify policy statements for more that one client protocol including more than one version of a client protocol. Thus, there are also general needs for methods and policy compilers that may transition between configuration states without transitioning between intervening states.